有一個樹狀字典,結構如下
A = {
'LINE': 12561,
'CLASS': 'TYPEDEF',
'TYPE': 'STRUCT',
'OFFSET': nan,
'SIZE': 12047,
'Member': {
'A1': {'LINE': 12562,
'CLASS': 'MEMBER',
'TYPE': 'U_LONG',
'OFFSET': 0,
'SIZE': 4},
'A2': {'LINE': 12566,
'CLASS': 'MEMBER',
'TYPE': 'STRUCT',
'OFFSET': 12,
'SIZE': 387,
'Member': {
'A2_1': {
'LINE': 12516,
'CLASS': 'MEMBER',
'TYPE': 'ARRAY',
'OFFSET': 0,
'SIZE': 128,
'Member': {
'A2_1_1': {
'LINE': 13320,
'CLASS': 'TYPEDEF',
'TYPE': 'UNION',
'OFFSET': 0,
'SIZE': 2},
'A2_1_2': {
'LINE': 13320,
'CLASS': 'TYPEDEF',
'TYPE': 'UNION',
'OFFSET': 2,
'SIZE': 2}}}}}}}
每個key裡面固定會有'LINE'、'CLASS'、'TYPE'、'OFFSET'、'SIZE'五個key及對應的value,若有'Member'的話代表還有有下一層
目標為遍歷所有Member裡的key,取出所有的OFFSET值並print出來,結果希望如下
A : 0
A1 : 0
A2 : 12
A2_1 : 0
A2_1_1 : 0
A2_1_2 : 2
其實就是基本的樹狀遍歷,只是寫成遞迴就很容易搞混,因此寫下來記錄一下
def getList(Dict,aboveName = None,layer = 0):
for i in range(layer):
print("\t",end='')
print(aboveName,":",Dict['OFFSET'])
for k in Dict.keys():
if k =='Member':
for kk in Dict['Member'].keys():
getList(Dict = Dict['Member'][kk],
aboveName = kk,
layer = layer + 1)